package com.yugao.fintech.antelope.system.assembly;

import com.yugao.fintech.antelope.base.config.core.ConfigMsg;
import com.yugao.fintech.antelope.base.model.module.config.param.PublicConfigParam;
import com.yugao.fintech.antelope.system.model.entity.SysConfig;
import com.yugao.fintech.antelope.system.model.rqrs.config.*;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.Mappings;

/**
 * 参数配置
 */
@Mapper(componentModel = "spring")
public interface SysConfigAssembly {
    ConfigResp toConfigResp(SysConfig source);

    SysConfig toConfig(ConfigSaveReq source);

    SysConfig toConfig(ConfigUpdateReq source);

    SysConfig toConfig(ConfigParamUpdateReq source);

    PublicConfigResp.WebSite toWebSite(PublicConfigParam webSite);

    @Mappings({
            @Mapping(source = "defaultHeadImg", target = "head")
    })
    PublicConfigResp.DefaultImage toDefaultImage(PublicConfigParam webSite);

    void toUpdateConfig(@MappingTarget SysConfig config, ConfigParamUpdateReq source);

    default ConfigMsg toConfigMsg(String configKey, String configValue) {
        return ConfigMsg.builder().configKey(configKey).configValue(configValue).build();
    }

    default ConfigMsg toConfigMsg(SysConfig config) {
        return ConfigMsg.builder().tenantId(config.getTenantId())
                .configKey(config.getConfigKey()).configValue(config.getConfigValue()).build();
    }
}